gusucode.com > vc串口通信程序,它是得到51单片机传来的 数据 > vc串口通信程序,它是得到51单片机传来的 数据/vb chuank.txt

    void CIoView::OnInitialUpdate()
{
   CFormView::OnInitialUpdate();
   GetParentFrame()->RecalcLayout();
   ResizeParentToFit();
"
  if(this->m_ctrMscom.GetPortOpen())
"m_ctrMscom.SetPortOpen(FALSE);
"
  m_ctrMscom.SetCommPort(1); //选择com1
  if( !m_ctrMscom.GetPortOpen())
    m_ctrMscom.SetPortOpen(true);//打开串口
  else
    AfxMessageBox("cannot open serial port");
"
  m_ctrMscom.SetSettings("9600,n,8,1"); 
  //波特率9600,无校验,8个数据位,1个停止位
"
  m_ctrMscom.SetInputMode(1); // 以二进制方式检取数据
  m_ctrMscom.SetRThreshold(1); 
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
  m_ctrMscom.SetInputLen(0); //设置当前接收区数据长度为0
  m_ctrMscom.GetInput();//先预读缓冲区以清除残留数据
"
"
}

oncomm事件函数:
void CIoView::OnOnCommMscomm1() 
{
  VARIANT variant_inp;
  COleSafeArray safearray_inp;
  LONG len,k;
  BYTE rxdata[2048];
  //设置BYTE数组 An 8-bit integerthat is not signed.
  CString strtemp;
  if(this->m_ctrMscom.GetCommEvent()==2) 
  //事件值为2表示接收缓冲区内有字符
  {       
   //以下你可以根据自己的通信协议加入处理代码
    variant_inp=m_ctrMscom.GetInput(); //读缓冲区
    safearray_inp=variant_inp;
  //VARIANT型变量转换为ColeSafeArray型变量
    len=safearray_inp.GetOneDimSize(); //得到有效数据长度
    for(k=0;k<len;k++)
      safearray_inp.GetElement(&k,rxdata+k);
   //转换为BYTE型数组
    for(k=0;k<len;k++) //将数组转换为Cstring型变量
    {
      BYTE bt=*(char*)(rxdata+k); //字符型
      strtemp.Format("%c",bt);
   //将字符送入临时变量strtemp存放
      this->m_strReceive+=strtemp;
    //加入接收编辑框对应字符串 
    }
}
"UpdateData(FALSE); //更新编辑框内容

}